/**
 * 第7章 Spring MVC的高级技术
 * 项目访问根路径：http://localhost:8889/q1-ch07a-Spittr
 * 代码清单-q1ch07a-01：再次搭建一下Spring MVC {@link top.kaoshanji.q1ch07a.web.HomeController#home(org.springframework.ui.Model)}
 * 代码清单-q1ch07a-02：以MultipartFile的形式接受上传的文件 {@link top.kaoshanji.q1ch07a.web.SpitterController#processRegistration(org.springframework.web.multipart.MultipartFile, top.kaoshanji.q1ch07a.vo.SpitterForm)}
 * 代码清单-q1ch07a-03：这是一个资源没有找到的异常404HTTP状态码 {@link top.kaoshanji.q1ch07a.web.SpittleController#spittleDetail(long, org.springframework.ui.Model)}
 * 代码清单-q1ch07a-216页a：@ResponseStatus注解，将异常映射为特定的状态码 {@link top.kaoshanji.q1ch07a.exception.NotFound404Exception}
 * 代码清单-q1ch07a-06：处理此控制器内抛出的DuplicateException异常 {@link top.kaoshanji.q1ch07a.web.SpittleController#handleDuplicate()}
 * 代码清单-q1ch07a-04：如果此控制器内的方法抛出DuplicateException异常，就会被handleDuplicate方法处理 {@link top.kaoshanji.q1ch07a.web.SpittleController#saveSpittle(org.springframework.ui.Model)}
 * 代码清单-q1ch07a-219页a：使用@ControllerAdvice，为所有的控制器处理异常 {@link top.kaoshanji.q1ch07a.web.AppWideExceptionHandler}
 * 代码清单-q1ch07a-05：如果全局范围内的控制器抛出AppWideException，就会被AppWideExceptionHandler处理 {@link top.kaoshanji.q1ch07a.web.SpittleController#spittleList(org.springframework.ui.Model)}
 * 代码清单-q1ch07a-220页a：通过URL模板进行重定向 {@link top.kaoshanji.q1ch07a.web.SpitterController1#processRegistration(top.kaoshanji.q1ch07a.vo.SpitterForm, org.springframework.ui.Model)}
 * 代码清单-q1ch07a-222页a：使用flash属性 {@link top.kaoshanji.q1ch07a.web.SpitterController2#processRegistration(top.kaoshanji.q1ch07a.vo.SpitterForm, org.springframework.web.servlet.mvc.support.RedirectAttributes)}
 * @author kaoshanji
 * ^_^
 * create time 2025/4/25 10:16
 */
package top.kaoshanji.q1ch07a;